package cn.xiaobai.server;

import cn.hutool.core.lang.TypeReference;
import cn.hutool.json.JSONUtil;
import cn.xiaobai.domain.ResourceConfig;
import cn.xiaobai.utils.MD5ToolUtils;
import cn.xiaobai.utils.ToolsUtils;
import cn.xioabai.common.utility.JsonFileUtils;
import cn.xioabai.common.utility.SystemUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.io.File;

/**
 * 应用入口
 *
 * @Author yangdaji
 * @Date 2022/9/3
 * @PackageName cn.xiaobai.configuration.bat.run
 * @ClassName Application
 */
@Slf4j
@Component
public class MD5Server {

    /**
     * 用户目录下配置
     */
    @Value("${conf.user-config:/conf/md5-update.json}")
    private String USER_CONFIG;

    /**
     * 加载配置 v2
     */
    @PostConstruct
    public void loadConfig() {
        //读取配置项
        log.info("----------------加载配置中---------------");
        // 未读取到资源目录下配置则读取用户所在目录下的配置
        String jsonData = JsonFileUtils.readConfigFile(SystemUtils.getUserDir() + USER_CONFIG);

        if (StringUtils.isBlank(jsonData)) {
            // 若用户下未定义此配置则取消执行
            return;
        }

        ResourceConfig resourceModule = JSONUtil.toBean(jsonData, new TypeReference<ResourceConfig>() {
        }, false);
        String filePath = resourceModule.getFilePath();

        // 文件未指定, 未开启批量修改
        Boolean batchStatus = false;
        if (ToolsUtils.isBlank(filePath)) {
            // 未配置修改的文件
            log.info("----------------没有配置需要修改的文件!---------------");
            return;
        }

        log.info(String.format("加载配置信息-->[批量修改, 修改文件路径: %s]", filePath));
        //文件修改
        log.info("--------------文件[md5]值修改中-------------");
        batchUpdate(filePath);

    }

    private void batchUpdate(String filePath) {
        File file = new File(filePath);
        //判断是否是文件
        if (file.isDirectory()) {
            MD5ToolUtils.batchUpdateDirectory2FileMD5(filePath);
            log.info(String.format("%s 目录下所有文件修改完毕", filePath));
        } else {
            log.info(filePath + " 不是目录,请检查是否正确!");
        }
    }

}
